home *** CD-ROM | disk | FTP | other *** search
/ Apple Developer Connection Student Program / ADC Tools Sampler CD Disk 3 1999.iso / Cool Demos, SDKs, & Tools / Demos⁄Tools⁄Offers / Eiffel for CW beta 3 / Example Projects / EiffelText / EiffelText.h < prev    next >
Text File  |  1999-02-21  |  18KB  |  488 lines

  1. /*
  2.     File:        EiffelText.h
  3.  
  4.     Contains:    defines input for both .c and .r files.
  5.                 structured so as to compile corrected in both.
  6.  
  7.     Version:    EiffelText 1.0
  8.  
  9. ** Copyright 1993-1996 Apple Computer. All rights reserved.
  10. **
  11. **    You may incorporate this sample code into your applications without
  12. **    restriction, though the sample code has been provided "AS IS" and the
  13. **    responsibility for its operation is 100% yours.  However, what you are
  14. **    not permitted to do is to redistribute the source as "DSC Sample Code"
  15. **    after having made changes. If you're going to re-distribute the source,
  16. **    we require that you make it clear in the source that the code was
  17. **    descended from Apple Sample Code, but that you've made changes.
  18.  
  19. **  YES - THIS HAS BEEN CHANGED FOR EIFFEL TEXT.
  20.  
  21. */
  22.  
  23. #ifndef __SIMPLETEXT__
  24. #define __SIMPLETEXT__
  25.  
  26. #define kScrollBarSize                15        // size of a scroll bar, in pixels
  27.  
  28. // Internal errors -- WARNING: some also appear in SimpleText.r
  29. #define eActionAlreadyHandled        100        // the action was handled by the object, don't report an error
  30. #define eUserCanceled                101        // user canceled an operation
  31.  
  32. #define eDocumentTooLarge            200        // document too large to be opened
  33. #define eDocumentWrongKind            201        // document cannot be opened by this application
  34. #define eErrorWhileDrawing            202        // error while drawing the document
  35. #define eDocumentContainsPS            203        // document contains PostScript, it may not display properly
  36. #define eMachineToOld                204
  37. #define eDocumentNotModifiable        205        // document can't be modified
  38. #define eDocumentAlreadyOpen        206
  39. #define eDocumentContainsNoPages    207
  40.  
  41. #define eDocumentHasNoContentsEntries 208    
  42.  
  43. // icon IDs -- WARNING: Also appear in SimpleText.r
  44. #define kTextIcon                    129
  45. #define kReadOnlyIcon                130
  46. #define kPICTIcon                    131
  47. #define kStationeryIcon                132
  48.  
  49. // menu and item defines -- define 'MENU' 'MCMD' 'hmnu' and 'STR#' IDs for menus!
  50. #define rMenuBar            128
  51.  
  52. #define    mApple                128
  53. #define    mFile                129
  54. #define    mEdit                130
  55. #define mFont                131
  56. #define mSize                132
  57. #define mStyle                133
  58. #define    mSound                134
  59. #define mVoices                135
  60. #define mContents            136        
  61.  
  62. #define mLastMenu            mContents
  63. #define mNumberMenus        9
  64.  
  65. #define mFontSubMenusStart    200
  66.  
  67. // Command numbers
  68. #define cNull                0
  69. #define cAbout                1
  70. #define cDeskAccessory        2
  71. #define cTypingCommand        3
  72.  
  73. #define cNew                10
  74. #define cOpen                11
  75. #define cClose                12
  76. #define cSave                13
  77. #define cSaveAs                14
  78. #define cPageSetup            15
  79. #define cPrint                16
  80. #define cPrintOneCopy        17
  81. #define cQuit                18
  82.  
  83. #define cUndo                20
  84. #define cCut                21
  85. #define cCopy                22
  86. #define cPaste                23
  87. #define cClear                24
  88. #define cSelectAll            25
  89. #define cFind                26
  90. #define cFindAgain            27
  91. #define cFindSelection        28
  92. #define cReplace            29
  93. #define cReplaceAgain        30
  94. #define cNextPage            31
  95. #define cPreviousPage        32
  96. #define cGotoPage            33
  97.     #define cGotoLast            32767
  98.     #define cGotoFirst            -32767
  99. #define cShowClipboard        34
  100.  
  101. #define cSelectFont            35
  102. #define cSelectFontStyle    36
  103.  
  104. #define cSize9                40
  105. #define cSize10                41
  106. #define cSize12                42
  107. #define cSize14                43
  108. #define cSize18                44
  109. #define cSize24                45
  110. #define cSize36                46
  111.  
  112. #define cPlain                50
  113. #define cBold                51
  114. #define cItalic                52
  115. #define cUnderline            53
  116. #define cOutline            54
  117. #define cShadow                55
  118. #define cCondensed            56
  119. #define cExtended            57
  120.  
  121. #define cRecord                60
  122. #define cPlay                61
  123. #define cErase                62
  124. #define cSpeak                63
  125. #define cStopSpeaking        64
  126. #define cSelectVoice        65
  127. #define cSelectVoiceSubMenu    66
  128.  
  129. #define cSelectContents        75        
  130.  
  131. // windows, dialogs, alerts, and other items of that sort
  132. #define kDefaultWindowID        128
  133. #define kSaveChangesWindowID    129
  134. #define kFindWindowID            130
  135. #define kReplaceWindowID        131
  136.     #define iFindEdit                4
  137.     #define iCaseSensitive            5
  138.     #define iWrapAround                6
  139.     #define iReplaceEdit            8
  140.     #define iReplaceAll                9
  141.     
  142. // Error STR# base
  143. #define kErrorBaseID            1000
  144.  
  145. // Help for window STR#
  146. #define kWindowHelpID            2000
  147.     #define iDidTheBalloon                -1
  148.     #define iNoBalloon                    0
  149.     
  150.     #define iHelpActiveScroll            1
  151.     #define iHelpDimHorizScroll            2
  152.     #define iHelpDimVertScroll            3
  153.     #define iHelpGrowBox                4
  154.     #define iHelpGenericContent            5
  155.  
  156.     #define iHelpPictContent            6
  157.     #define iHelpPictSelection            7
  158.     #define iHelpTextContent            8
  159.  
  160. // Miscellaneous strings (STR#)
  161. #define kMiscStrings            3000
  162. #define iFirstNewDocumentTitle    1
  163. #define iHelpMenuCommand        2
  164. #define iSelectAllCommand        3
  165. #define iSelectNoneCommand        4
  166.  
  167. // Patterns used for selections
  168. #define kPatternListID        128
  169.  
  170. // for disabling menu items
  171. #define AllItems    0b1111111111111111111111111111111    /* 31 flags */
  172. #define NoItems        0b0000000000000000000000000000000
  173. #define MenuItem1    0b0000000000000000000000000000001
  174. #define MenuItem2    0b0000000000000000000000000000010
  175. #define MenuItem3    0b0000000000000000000000000000100
  176. #define MenuItem4    0b0000000000000000000000000001000
  177. #define MenuItem5    0b0000000000000000000000000010000
  178. #define MenuItem6    0b0000000000000000000000000100000
  179. #define MenuItem7    0b0000000000000000000000001000000
  180. #define MenuItem8    0b0000000000000000000000010000000
  181. #define MenuItem9    0b0000000000000000000000100000000
  182. #define MenuItem10    0b0000000000000000000001000000000
  183. #define MenuItem11    0b0000000000000000000010000000000
  184. #define MenuItem12    0b0000000000000000000100000000000
  185. #define MenuItem13    0b0000000000000000001000000000000
  186. #define MenuItem14    0b0000000000000000010000000000000
  187. #define MenuItem15    0b0000000000000000100000000000000
  188. #define MenuItem16    0b0000000000000001000000000000000
  189. #define MenuItem17    0b0000000000000010000000000000000
  190. #define MenuItem18    0b0000000000000100000000000000000
  191. #define MenuItem19    0b0000000000001000000000000000000
  192.  
  193. // Size resource information
  194. #define kPreferredSize        512*1024
  195. #define kMinimumSize        192*1024
  196.  
  197. #ifndef REZ
  198.  
  199.     enum {
  200.         // Keyboard virtual keycode constants
  201.         kHome        = 0x73,
  202.         kEnd        = 0x77,
  203.         kPageUp        = 0x74,
  204.         kPageDown    = 0x79,
  205.         kUpArrow    = 0x7E,
  206.         kDownArrow    = 0x7D,
  207.         kLeftArrow    = 0x7B,
  208.         kRightArrow    = 0x7C,
  209.         kF1            = 0x7A,
  210.         kF2            = 0x78,
  211.         kF3            = 0x63,
  212.         kF4            = 0x76,
  213.     
  214.         kFromTopTipOffset = 20,                        // offset from top/left of balloons
  215.         kFromBottomTipOffset = 7,                    // offset from bottom/right of balloons
  216.         
  217.         kRAMNeededForNew = 64*1024,                    // amount of RAM free before we allow New documents
  218.         kGrowScrollAdjust = 13,                        // amount to cull scroll bar to make room for growbox
  219.         
  220.         kMinDocSize        =     128                        // min window size in pixels
  221.         };
  222.  
  223.     enum
  224.         {
  225.         kMaxWaitTime    =    5*60*60                // maximum time to pass to WaitNextEvent()
  226.         };
  227.         
  228.     struct MachineInfoRec
  229.         {
  230.         SysEnvRec        theEnvirons;            // SysEnvirons for this machine
  231.         Boolean            amInBackground;            // are we running in the background or foreground
  232.         long            documentCount;            // # of new docs we have made
  233.         short            lastBalloonIndex;        // identifier of last balloon we displayed
  234.  
  235.         Boolean            haveQuickTime;            // do we have QuickTime installed?
  236.         Boolean            haveRecording;            // do we have sound input?
  237.         Boolean            haveTTS;                // do we have text to speech?
  238.         Boolean            haveGX;                    // do we have GX?
  239.         Boolean            haveTSM;                // do we have text services?
  240.         Boolean            haveTSMTE;                // have inline support for TE?
  241.         Boolean            haveDragMgr;            // do we have the Drag Manager?
  242.         Boolean            haveThreeD;                // do we have 3D on this machine?
  243.         Boolean            haveAppleGuide;            // do we have AppleGuide?
  244.         Boolean            haveThreads;            // do we have threads?
  245.         
  246.         Boolean            haveStartedGX;            // have initialized GX
  247.         };
  248.     typedef struct MachineInfoRec MachineInfoRec, *MachineInfoPtr;
  249.  
  250.     #ifndef CompilingMain
  251.     extern MachineInfoRec     gMachineInfo;
  252.     extern EventRecord        gEvent;
  253.     extern Str255            gFindString, gReplaceString;
  254.     extern Boolean            gWrapAround, gCaseSensitive;
  255.     #endif
  256.     
  257.     
  258.     struct PreflightRecord
  259.         {
  260.         Boolean        continueWithOpen;    // continue with the opening of the window
  261.         Boolean        needResFork;        // create resfork if none exists
  262.         SignedByte    openKind;            // kind of opening of this file
  263.         short        resourceID;            // resource ID of the 'WIND' resource
  264.         Boolean        wantHScroll;        // want a horizontal scroll bar
  265.         Boolean        wantVScroll;        // want a vertical scroll bar
  266.         Boolean        doZoom;                // want window opened large
  267.         long        storageSize;        // data for the window's refCon
  268.         void *        makeProcPtr;        // pointer to the make proc
  269.         OSType        fileType;            // file type of document
  270.         };
  271.     typedef struct PreflightRecord PreflightRecord, *PreflightPtr;
  272.     
  273.     struct LongRect
  274.         {
  275.         long    top;
  276.         long    left;
  277.         long    bottom;
  278.         long    right;
  279.         };
  280.     typedef struct LongRect LongRect;
  281.     
  282.     typedef OSErr     (*PreflightWindowProc) (PreflightPtr pPreflightData);
  283.     typedef OSErr     (*MakeWindowProc) (WindowRef pWindow, void* refCon);
  284.     typedef OSErr     (*UpdateWindowProc) (WindowRef pWindow, void* refCon);
  285.     typedef OSErr     (*AdjustMenusProc) (WindowRef pWindow, void* refCon);
  286.     typedef OSErr     (*CloseWindowProc) (WindowRef pWindow, void* refCon);
  287.     typedef OSErr     (*GetDocumentRectProc) (WindowRef pWindow, void* refCon, LongRect * documentRectangle, Boolean forGrow);
  288.     typedef OSErr     (*ContentClickProc) (WindowRef pWindow, void* refCon, EventRecord * event);
  289.     typedef OSErr     (*ScrollContentProc) (WindowRef pWindow, void* refCon, short deltaH, short deltaV);
  290.     typedef Boolean    (*FilterEventProc) (WindowRef pWindow, void* refCon, EventRecord * event);
  291.     typedef OSErr    (*ActivateEventProc) (WindowRef pWindow, void* refCon, Boolean activating);
  292.     typedef OSErr    (*KeyEventProc) (WindowRef pWindow, void* refCon, EventRecord * event, Boolean isMotionKey);
  293.     typedef OSErr    (*AdjustSizeProc) (WindowRef pWindow, void* refCon, Boolean *didResize);
  294.     typedef OSErr    (*CommandProc) (WindowRef pWindow, void* refCon, short commandID, long menuResult);
  295.     typedef OSErr    (*AdjustCursorProc) (WindowRef pWindow, void* refCon, Point * localMouse, Rect *globalRect);
  296.     typedef OSErr    (*PrintPageProc) (WindowRef pWindow, void* refCon, Rect* pageRect, long* pageNum);
  297.     typedef OSErr    (*GetBalloonProc) (WindowRef pWindow, void* refCon, Point *localMouse, short * returnedBalloonIndex, Rect *returnedRectangle);
  298.     typedef OSErr    (*DragTrackingProc) (WindowRef pWindow, void *refCon, DragReference theDragRef, short message);
  299.     typedef OSErr    (*DragReceiveProc) (WindowRef pWindow, void *refCon, DragReference theDragRef);
  300.     typedef OSErr    (*DragAddFlavorsProc) (WindowRef pWindow, void *refCon, DragReference theDragRef);
  301.     typedef long    (*CalculateIdleTimeProc) (WindowRef pWindow, void* refCon);
  302.     typedef OSErr    (*GetCoachRectangleProc) (WindowRef pWindow, void* refCon, Rect *pRect, Ptr name);
  303.  
  304.     struct WindowDataRecord
  305.         {
  306.         WindowRecord            theWindow;                // toolbox storage
  307.         ResType                    windowKind;                // and kind to identify window type
  308.         OSType                    originalFileType;        // original source of file
  309.         FSSpec                    fileSpec;                // file spec of the file
  310.         short                    dataRefNum;                // data fork refNum
  311.         short                    resRefNum;                // res fork refNum
  312.         Boolean                    isWritable;                // can you write to this file?
  313.         Boolean                    bumpUntitledCount;        // does this kind of document use up an "untitled" number?
  314.         Boolean                    openAsNew;                // open as an untitled document?
  315.         Boolean                    changed;                // has content changed?
  316.         Boolean                    documentOutputsGX;        // document provides GX printing
  317.         Boolean                    documentAcceptsText;    // document allows typing
  318.         Boolean                    dragWindowAligned;        // drag using DragAlignedWindow
  319.         
  320.         // Standard procedure entry points, may be NIL to get default behavior
  321.         PreflightWindowProc        pPreflightWindow;
  322.         MakeWindowProc            pMakeWindow;
  323.         CloseWindowProc            pCloseWindow;
  324.         
  325.         GetDocumentRectProc        pGetDocumentRect;
  326.         ScrollContentProc        pScrollContent;
  327.         AdjustSizeProc            pAdjustSize;
  328.         AdjustCursorProc        pAdjustCursor;
  329.         GetBalloonProc            pGetBalloon;
  330.         DragTrackingProc        pDragTracking;
  331.         DragReceiveProc            pDragReceive;
  332.         DragAddFlavorsProc        pDragAddFlavors;
  333.         
  334.         FilterEventProc            pFilterEvent;
  335.         ActivateEventProc        pActivateEvent;
  336.         UpdateWindowProc        pUpdateWindow;
  337.         AdjustMenusProc            pAdjustMenus;
  338.         KeyEventProc            pKeyEvent;
  339.         ContentClickProc        pContentClick;
  340.         CommandProc                pCommand;
  341.         PrintPageProc            pPrintPage;
  342.         CalculateIdleTimeProc    pCalculateIdleTime;
  343.         GetCoachRectangleProc    pGetCoachRectangle;
  344.         
  345.         // controls that the default implementations use
  346.         void*                    hPrint;            // print record, gxJob, or NIL for none
  347.         Boolean                    hasGrow;        // has a grow box?
  348.         Rect                    contentRect;    // content area, minus the scroll bars
  349.         short                    minHSize;        // minimum window X size, 0 default
  350.         short                    minVSize;        // minimum window Y size, 0 default
  351.         ControlRef                hScroll;        // horizontal scroll bar
  352.         ControlRef                vScroll;        // vertical scroll bar
  353.         short                    hScrollAmount;    // amount to scroll in left/right arrow
  354.         short                    vScrollAmount;    // amount to scroll in up/down arrow
  355.         short                    hScrollOffset;    // offset of scrollbar from left side of window
  356.         short                    vScrollOffset;    // offset of scrollbar from top of window
  357.         
  358.         // variables having to do with input support
  359.         TSMTERecHandle            docTSMRecHandle;    // TSM info stored here
  360.         TSMDocumentID            docTSMDoc;            // TSM document id
  361.         
  362.         // Custom data follows here
  363.         };
  364.     typedef struct WindowDataRecord WindowDataRecord, *WindowDataPtr;    
  365.  
  366.     // Window adjustment routines
  367.     OSErr AdjustScrollBars(WindowRef pWindow, Boolean moveControls, Boolean didGrow, Boolean *needInvalidate);
  368.     void SetControlAndClipAmount(ControlRef control, short * amount);
  369.     OSErr DoScrollContent(WindowRef pWindow, WindowDataPtr pData, short deltaH, short deltaV);
  370.  
  371.     // document rectangle utilities
  372.     void LongRectToRect(LongRect* longRect, Rect *rect);
  373.     void RectToLongRect(Rect *rect, LongRect *longRect);
  374.     void MovableModalDialog(ModalFilterProcPtr filterProc, short * pItem);
  375.     void BeginMovableModal(void);
  376.     void EndMovableModal(void);
  377.     void GetPICTRectangleAt72dpi(PicHandle hPicture, Rect *pictureRect);
  378.     
  379.     // menu command utilities
  380.     void EnableCommand(short commandID);
  381.     void EnableCommandCheck(short commandID, Boolean check);
  382.     void EnableCommandCheckStyle(short commandID, Boolean check, short style);
  383.     void ChangeCommandName(short commandID, short resourceID, short resourceIndex);
  384.     Boolean IsCommandEnabled(short commandID);
  385.  
  386.     // printing utility routines
  387.     Boolean IsSomewhereInRectangle(gxRectangle *pContainer, gxRectangle *pShape);
  388.     OSErr    DoDefault(WindowDataPtr     pData);
  389.     OSErr    DoPageSetup(WindowRef pWindow);
  390.  
  391.     // event handling routines
  392.     void HandleEvent(EventRecord *);
  393.     void DragAndDropArea(WindowRef pWindow, WindowDataPtr pData, EventRecord* event, Rect *pFrameRect);
  394.     short ConductFindOrReplaceDialog(short dialogID);
  395.     Boolean PerformSearch(
  396.             Handle    h,                    // handle to search
  397.             long start,                    // offset to begin with
  398.             Str255 searchString,        // string to search for
  399.             Boolean isCaseSensitive,    // case sensitive search
  400.             Boolean isBackwards,        // search backwards from starting point
  401.             Boolean isWraparound,        // wrap search around from end->begining
  402.             long * pNewStart,            // returned new selection start
  403.             long * pNewEnd);            // returned new selection end
  404.  
  405.     // Drag utils
  406.     Boolean IsOnlyThisFlavor(DragReference theDragRef, FlavorType theType);
  407.     Boolean IsDropInFinderTrash(AEDesc *dropLocation);
  408.     Boolean DragText(WindowRef pWindow, void *pData, EventRecord *pEvent, RgnHandle hilightRgn);
  409.     OSErr TextDragTracking(WindowRef pWindow, void *pData, DragReference theDragRef, short message);
  410.     OSErr TextDragReceive(WindowRef pWindow, void *pData, DragReference theDragRef);
  411.     
  412.     // TEClick utilities
  413.     pascal void TextClickLoop(void);
  414.     pascal TEClickLoopUPP GetOldClickLoop(void);
  415.     void AdjustTE(WindowDataPtr pData, Boolean doScroll);
  416.  
  417.     // error utilities
  418.     void ConductErrorDialog(OSErr error, short commandID, short alertType);
  419.  
  420.     // generic utilities
  421.     void SetWatchCursor(void);
  422.     OSErr SaveCurrentUndoState(WindowDataPtr pData, short newCommandID);
  423.     #if GENERATINGPOWERPC
  424.         pascal void MyDrawHook ( unsigned short offset, unsigned short textLen,
  425.             Ptr textPtr, TEPtr tePtr, TEHandle teHdl );
  426.     #else
  427.         pascal void MyDrawHook ( TEHandle teHdl, TEPtr tePtr, Ptr textPtr, short textLen, short offset );
  428.     #endif
  429.     
  430.     // Preflight routines for the windows we support
  431.     OSErr AboutPreflightWindow(PreflightPtr pPreflightData);
  432.     OSErr PICTPreflightWindow(PreflightPtr pPreflightData);
  433.     OSErr MoviePreflightWindow(PreflightPtr pPreflightData);
  434.     OSErr ClipboardPreflightWindow(PreflightPtr pPreflightData);
  435.     OSErr TextPreflightWindow(PreflightPtr pPreflightData);
  436.     OSErr GXPreflightWindow(PreflightPtr pPreflightData);
  437.     OSErr ThreeDPreflightWindow(PreflightPtr pPreflightData);
  438.     
  439.     // File type routines for the document kinds we support
  440.     void AboutGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes);
  441.     void PICTGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes);
  442.     void MovieGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes);
  443.     void ClipboardGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes);
  444.     void TextGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes);
  445.     void GXGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes);
  446.     void ThreeDGetFileTypes(OSType * pFileTypes, OSType * pDocumentTypes, short * numTypes);
  447.     
  448.     // selection rectangle utilities
  449.     #define MOVESELECTION(X) (((X) & 0x7) == 0x4)
  450.     void DrawSelection(WindowDataPtr pData, Rect *pSelection, short * pPhase, Boolean bumpPhase);
  451.     OSErr SelectContents(WindowRef pWindow, WindowDataPtr pData, EventRecord *pEvent, Rect *pSelection, Rect *pContent, short *pPhase);
  452.     
  453.     // Exported globals
  454.     struct FontMappingRecord
  455.         {
  456.         gxFont    fontID;
  457.         short    qdFont;
  458.         Style    qdStyle;
  459.         };
  460.     typedef struct FontMappingRecord FontMappingRecord, *FontMappingPtr, **FontMappingHandle;
  461.  
  462.     extern FontMappingHandle gFontMappingList;
  463.     
  464. #endif
  465.  
  466. // defined window kinds and resource ranges for windows we support
  467. #define kAboutWindow        'ABOT'
  468. #define kAboutBaseID        200
  469.  
  470. #define kPICTWindow            'PICT'
  471. #define kPICTBaseID            300
  472.  
  473. #define kMovieWindow        'MooV'
  474. #define kMovieBaseID        400
  475.  
  476. #define kClipboardWindow    'Clip'
  477. #define kClipboardBaseID    500
  478.  
  479. #define kTextWindow            'TEXT'
  480. #define kTextBaseID            600
  481.  
  482. #define kGXWindow            'qdgx'
  483. #define kGXBaseID            700
  484.  
  485. #define kThreeDWindow        '3DMF'
  486. #define kThreeDBaseID        800
  487.  
  488. #endif